package com.ct.utils;

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.locks.LockSupport;

/**
 * 线程工具类
 */
@Slf4j
public class ThreadUtil {


    /**
     * 获取当前线程
     */
    public static Thread getCurThread() {
        return Thread.currentThread();
    }

    /**
     * 获取当前线程的名称
     */
    public static String getCurThreadName() {
        return getCurThread().getName();
    }

    /**
     * 获取当前线程ID
     */
    public static long getCurThreadId() {
        return getCurThread().getId();
    }

    /**
     * 调用栈中的方法名称
     */
    public static String stackMethodName(int level) {
        //Thread.currentThread().getStackTrace()[1]是当前方法 curMethodName 执行堆栈
        //Thread.currentThread().getStackTrace()[2]就是 curMethodName 的 上一级的方法堆栈 以此类推
        String className = Thread.currentThread().getStackTrace()[level].getMethodName();//调用的类名
        return className;
    }

    /**
     * 调用栈中的类名
     */
    public static String stackClassName(int level) {
        //Thread.currentThread().getStackTrace()[1]是当前方法 curClassName 执行堆栈
        //Thread.currentThread().getStackTrace()[2]就是 curClassName 的 上一级的方法堆栈 以此类推
        String className = Thread.currentThread().getStackTrace()[level].getClassName();//调用的类名
        return className;

    }

    /**
     * 调用了LockSupport.parkNanos(...)方法使得当前线程限时等待
     *
     * @param millisecond 等待的时间，单位毫秒
     */
    public static void sleepMilliSeconds(int millisecond) {
        //LockSupport.parkNanos()：让线程等待，时间以纳秒为单位。
        LockSupport.parkNanos(millisecond * 1000L * 1000L);
    }

    /**
     * 调用了LockSupport.parkNanos(...)方法使得当前线程限时等待
     *
     * @param seconds 等待的时间，单位秒
     */
    public static void sleepSeconds(int seconds) {
        sleepMilliSeconds(seconds * 1000);
    }




}
